iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0

在專案開發過程中,如何妥善管理環境與依賴套件,往往比寫程式本身更重要。因為隨著時間推移,套件會更新、版本會衝突、專案會擴張,如果沒有一個良好的環境隔離與管理策略,最終一定會走向「環境地獄(dependency hell)」。

Python 的一大亮點就是虛擬環境 (Virtual Environment),它可以把每個專案所需要使用的元件獨立開來,避免不同專案之間互相干擾。但 Python 的相關工具至今仍處於「百家爭鳴」的狀態,不同社群與公司都有推出解決方案。以下整理出目前最常見的幾種工具:

  • virtualenv:最早期的環境隔離工具
  • venv:Python 3.3 版本後內建,簡單好用
  • conda:Anaconda 釋出,偏向科學運算與資料科學領域
  • pipenv:一度是 Python.org 官方推薦的工具
  • poetry:社群活躍,強調「依賴管理 + 打包發佈」的解決方案
  • hatch:2022 年由 PyPA 推出,功能完整且緊貼 PEP 標準

我的觀察與建議

  1. 小專案 / 學習用途
    • 用內建的 venv 就足夠,簡單輕量。
  2. 資料科學 / AI 領域
    • 建議用 conda,因為它能一次解決 Python + C/CUDA 的相依套件問題。
  3. 中小型專案 / 想要好好維護的應用
    • 建議用 poetry,因為它的社群生態已經相對成熟,文件完整,學習成本低。
  4. 長期規模化開發 / 團隊維運 / 發佈套件
    • 強烈建議關注 hatch。它的設計理念是下一代 Python 工程化的基石,未來可望成為標準。

Python 環境管理工具比較表

工具 推出時間/來源 功能範疇 特點 適合場景
virtualenv 2007 / 社群 虛擬環境 最早期的環境隔離工具,支援多版本 Python 舊專案維護、需要向下相容
venv 2012 (Python 3.3 內建) 虛擬環境 Python 官方內建,輕量、免安裝 學習、個人小專案
conda Anaconda 發行 環境 + 套件 可同時管理 Python 與非 Python 套件(C/CUDA、R) 資料科學、AI/ML 領域
pipenv 2017 / Kenneth Reitz 環境 + 套件 官方曾推薦,支援 Pipfile 鎖定版本,但近年社群較冷清 小型專案,已有 Pipenv 用戶
poetry 2018 / 社群 環境 + 套件 + 發佈 整合專案管理,支援打包/發佈,活躍社群 中小型專案、套件開發
hatch 2022 / PyPA 環境 + 套件 + 專案全流程 PyPA 官方力推,支援多版本測試、建置、發佈,符合 PEP 標準 長期團隊專案、需要工程化管理

Hatch 的安裝與快速上手

在這一次鐵人賽的主題,我們的目標是打造 工程化的 Python 專案。既然如此,環境管理工具的選擇就非常關鍵。本系列將以 Hatch 作為主要的專案管理核心,因為它不僅能管理虛擬環境與相依套件,還能涵蓋建置、測試與發佈的完整流程。

所以從這裡開始,我們就要動手安裝 Hatch。安裝過程相當簡單,以下我會以 macOS 環境 為例進行示範(Linux 幾乎相同,Windows 則需調整安裝方式)。

安裝 Hatch

建議使用 pipx 來安裝(避免污染全域 Python 環境):

如果你沒有安裝 pipx,也可以直接用 pip install hatch,但這樣會安裝在全域環境,不建議工程化專案這麼做。

# 安裝 pipx (如果還沒有安裝)
python3 -m pip install --user pipx
python3 -m pipx ensurepath

# 使用 pipx 安裝 Hatch
pipx install hatch

確認安裝成功:

hatch --version

建立一個新專案

假設我們要建立一個名為 demo-app 的專案:

hatch new demo-app

這會自動產生一個專案骨架,包含以下檔案結構:

demo-app/
├── src/demo_app/__init__.py
├── tests/
│   └── test_demo_app.py
├── pyproject.toml
└── README.md
  • src/:程式碼放置目錄
  • tests/:單元測試
  • pyproject.toml:專案配置(PEP 621 格式)

Hatch 預設專案會放在 src/ 架構,這也是目前 Python 專案推薦的慣例,我們會在 Day 3 詳細介紹。

啟動虛擬環境

進入專案後,可以直接用 Hatch 啟動隔離環境:

cd demo-app
hatch shell

此時就已經進入 Hatch 管理的虛擬環境,後續安裝套件、執行程式、測試都能在這裡完成。

執行測試

Hatch 預設已經幫你設定好 pytest,直接執行:

hatch run test

這樣一來,從環境建立 → 套件管理 → 測試執行,全部都透過一個工具完成,這就是 工程化的價值

結語

工具的選擇並不是「越新越好」或「換得越快越好」,而是要符合 專案的需求團隊的工作習慣。如果你已經在使用 poetry,而且也能滿足日常的開發需求,那麼大可繼續沿用,沒有必要急著轉移到 Hatch。但若你正準備啟動一個全新的專案,尤其是涉及 團隊協作、長期維護或正式發佈 的情境,那麼投入一些時間學習 Hatch,很可能會在未來幫你節省大量環境維護與流程整合的成本。

在接下來的章節中,我們會持續以 Hatch 為基礎,逐步構建出一個工程化的 Python 專案,讓大家體驗從環境管理到測試、建置、發佈的完整開發流程。

Next Day

Day 3 - pyproject.toml:現代 Python 專案的核心設定檔


上一篇
Day 1 - 為什麼要「工程化的 Python」:系列導讀與範例專案藍圖
下一篇
Day 3 - pyproject.toml:現代 Python 專案的核心設定檔
系列文
30 天 Python 專案工坊:環境、結構、測試到部署全打通8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言